package jp.seraph.jspf.utils;

import jp.seraph.jsade.math.Angle;
import jp.seraph.jsade.model.JointIdentifier;

public interface SymmetricJointContext {
    /**
     * 対象ジョイントと左右対称の位置に存在するJointのIdentifierを返す。
     * 
     * @param aIdentifier
     *            対象のジョイントID
     * @return 対象ジョイントの左右対称位置に存在するジョイントID
     */
    public JointIdentifier getSymmetricIdentifier(JointIdentifier aIdentifier);

    /**
     * エージェントを"左右対称の恰好"にする際に、左右対称の位置にあるジョイントの設定すべき角度を返す
     * 
     * @param aIdentifier
     *            対象ジョイントID
     * @param aAngle
     *            設定すべき角度
     * @return
     */
    public Angle getSymmetricAngle(JointIdentifier aIdentifier, Angle aAngle);

    /**
     * 対象ジョイントが左側にあるかどうか
     * 
     * @param aIdentifier
     * @return 左側にあればtrue
     */
    public boolean isLeft(JointIdentifier aIdentifier);

    /**
     * 対象ジョイントが右側にあるかどうか
     * 
     * @param aIdentifier
     * @return 右側にあればtrue
     */
    public boolean isRight(JointIdentifier aIdentifier);

    /**
     * 対象ジョイントが真ん中にあるかどうか
     * 
     * @param aIdentifier
     * @return 真ん中にあればtrue
     */
    public boolean isCenter(JointIdentifier aIdentifier);
}
